﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DDD.Core {

    /// <summary>
    /// LODセレクトの候補とその選択基準を保存する構造体
    /// </summary>
    /// <remarks>
    /// LODは複数のノードから距離に応じて自動的に1つのノードを選択する仕組みです。
    /// <dic>LODCandidate</dic>はノード(<dic>Node</dic>)と、それが何ピクセルで描画されるべきかの解像度(<dic>Resolution</dic>)を持ちます。
    /// 新しいLOD候補は<see cref="LODSelector.AddCandidate"/>で追加します。 
    /// ユーザーが<dic>LODCandidate</dic>型を直接インスタンス化する事はできません。
    /// 必ずエンジン側が作成したものを戻り値で受け取ります。
    /// </remarks>
    public struct LODCandidate {

        /// <summary>
        /// コンストラクター
        /// </summary>
        /// <param name="node">ターゲットノード</param>
        /// <param name="resolution">描画目標解像度(ピクセル数)</param>
        public LODCandidate (Node node, float resolution)
            : this () {
            this.Node = node;
            this.Resolution = resolution;
        }

        /// <summary>
        /// LOD候補のノード
        /// </summary>
        /// <value>ターゲットノード</value>
        public Node Node { get; private set; }
        
        /// <summary>
        /// 目標解像度(ピクセル数)
        /// </summary>
        /// <value>目標解像度(ピクセル数)</value>
        public float Resolution { get; private set; }

        /// <summary>
        /// 現在のオブジェクトの状態を表す文字列を返します。
        /// </summary> 
        public override string ToString () {
            return string.Format("LODCandidate : Node={0}, Resolution={1}", Node, Resolution);
        }
    }
}
